require(tidyverse)
require(sf)
require(leaflet)

I am working on 3 CHONe projects, because 1 is not enough.

Here’s the code I used to map out my study sites. For OHI, I have a shapefile, but for the others, I’m only creating a box around the coordinates.

# set standard projection
projll <- "+proj=longlat +datum=WGS84"
# set OHI project
OHI <- read_sf("shapefiles/regions_final.shp") %>% 
    st_simplify(preserveTopology=T,dTolerance=1000) %>%
    st_transform(projll) %>% 
    st_combine() %>% 
    st_sf(name="Remi Daigle",
         description="OHI regional assessment",
         CHONeProject="2.1.1",
         geometry=.) 
# set Atlantic LTRANS connectivity project
bcbbox <- c(-70.88808,39.89707,-47.28724,53.56291)
BC <- cbind(
            c(bcbbox[1],bcbbox[3],bcbbox[3],bcbbox[1],bcbbox[1]),
            c(bcbbox[2],bcbbox[2],bcbbox[4],bcbbox[4],bcbbox[2])
        ) %>% 
    list() %>%                  # put that matrix in a list
    st_polygon() %>%            # put that list in a simple features polygon
    st_sfc(crs = projll) %>%  # put that polygon into a simple features column and give projection info
    st_sf(name="Remi Daigle",
         description="Atlantic LTRANS connectivity",
         CHONeProject="1.1.1",
         geometry=.)%>%    # finally make it an sf object
    st_cast("MULTIPOLYGON")
# set Atlantic LTRANS connectivity project
Atlbbox <- c(-135.8003,45.3837,-122.0694,56.1647)
Atlantic <- cbind(
            c(Atlbbox[1],Atlbbox[3],Atlbbox[3],Atlbbox[1],Atlbbox[1]),
            c(Atlbbox[2],Atlbbox[2],Atlbbox[4],Atlbbox[4],Atlbbox[2])
        ) %>% 
    list() %>%                  # put that matrix in a list
    st_polygon() %>%            # put that list in a simple features polygon
    st_sfc(crs = projll) %>%  # put that polygon into a simple features column and give projection info
    st_sf(name="Remi Daigle",
         description="BC LTRANS connectivity",
         CHONeProject="1.1.1",
         geometry=.) %>%    # finally make it an sf object
    st_cast("MULTIPOLYGON")
# bind all my sites together
sites <- rbind(OHI,BC,Atlantic)

Finally, plot it!

cols <- RColorBrewer::brewer.pal(nrow(sites),"Dark2")
leaflet(sites) %>%
    addTiles() %>% 
    addPolygons(group = ~description,
                color = cols) %>%
     addLegend("topright", 
               colors = cols,
               labels = unique(sites$description))

NA
LS0tDQp0aXRsZTogIlJlbWkgRGFpZ2xlIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KYGBge3IgbG9hZCBwYWNrYWdlcyxtZXNzYWdlPUZBTFNFLGNhY2hlPVRSVUV9DQpyZXF1aXJlKHRpZHl2ZXJzZSkNCnJlcXVpcmUoc2YpDQpyZXF1aXJlKGxlYWZsZXQpDQoNCmBgYA0KDQoNCkkgYW0gd29ya2luZyBvbiAzIENIT05lIHByb2plY3RzLCBiZWNhdXNlIDEgaXMgbm90IGVub3VnaC4NCg0KSGVyZSdzIHRoZSBjb2RlIEkgdXNlZCB0byBtYXAgb3V0IG15IHN0dWR5IHNpdGVzLiBGb3IgT0hJLCBJIGhhdmUgYSBzaGFwZWZpbGUsIGJ1dCBmb3IgdGhlIG90aGVycywgSSdtIG9ubHkgY3JlYXRpbmcgYSBib3ggYXJvdW5kIHRoZSBjb29yZGluYXRlcy4NCg0KYGBge3IgcHJlcGFyZSBzcGF0aWFsIGRhdGEsY2FjaGU9VFJVRX0NCiMgc2V0IHN0YW5kYXJkIHByb2plY3Rpb24NCnByb2psbCA8LSAiK3Byb2o9bG9uZ2xhdCArZGF0dW09V0dTODQiDQoNCiMgc2V0IE9ISSBwcm9qZWN0DQpPSEkgPC0gcmVhZF9zZigic2hhcGVmaWxlcy9yZWdpb25zX2ZpbmFsLnNocCIpICU+JSANCiAgICBzdF9zaW1wbGlmeShwcmVzZXJ2ZVRvcG9sb2d5PVQsZFRvbGVyYW5jZT0xMDAwKSAlPiUNCiAgICBzdF90cmFuc2Zvcm0ocHJvamxsKSAlPiUgDQogICAgc3RfY29tYmluZSgpICU+JSANCiAgICBzdF9zZihuYW1lPSJSZW1pIERhaWdsZSIsDQogICAgICAgICBkZXNjcmlwdGlvbj0iT0hJIHJlZ2lvbmFsIGFzc2Vzc21lbnQiLA0KICAgICAgICAgQ0hPTmVQcm9qZWN0PSIyLjEuMSIsDQogICAgICAgICBnZW9tZXRyeT0uKSANCg0KIyBzZXQgQXRsYW50aWMgTFRSQU5TIGNvbm5lY3Rpdml0eSBwcm9qZWN0DQpiY2Jib3ggPC0gYygtNzAuODg4MDgsMzkuODk3MDcsLTQ3LjI4NzI0LDUzLjU2MjkxKQ0KQkMgPC0gY2JpbmQoDQogICAgICAgICAgICBjKGJjYmJveFsxXSxiY2Jib3hbM10sYmNiYm94WzNdLGJjYmJveFsxXSxiY2Jib3hbMV0pLA0KICAgICAgICAgICAgYyhiY2Jib3hbMl0sYmNiYm94WzJdLGJjYmJveFs0XSxiY2Jib3hbNF0sYmNiYm94WzJdKQ0KICAgICAgICApICU+JSANCiAgICBsaXN0KCkgJT4lICAgICAgICAgICAgICAgICAgIyBwdXQgdGhhdCBtYXRyaXggaW4gYSBsaXN0DQogICAgc3RfcG9seWdvbigpICU+JSAgICAgICAgICAgICMgcHV0IHRoYXQgbGlzdCBpbiBhIHNpbXBsZSBmZWF0dXJlcyBwb2x5Z29uDQogICAgc3Rfc2ZjKGNycyA9IHByb2psbCkgJT4lICAjIHB1dCB0aGF0IHBvbHlnb24gaW50byBhIHNpbXBsZSBmZWF0dXJlcyBjb2x1bW4gYW5kIGdpdmUgcHJvamVjdGlvbiBpbmZvDQogICAgc3Rfc2YobmFtZT0iUmVtaSBEYWlnbGUiLA0KICAgICAgICAgZGVzY3JpcHRpb249IkF0bGFudGljIExUUkFOUyBjb25uZWN0aXZpdHkiLA0KICAgICAgICAgQ0hPTmVQcm9qZWN0PSIxLjEuMSIsDQogICAgICAgICBnZW9tZXRyeT0uKSU+JSAgICAjIGZpbmFsbHkgbWFrZSBpdCBhbiBzZiBvYmplY3QNCiAgICBzdF9jYXN0KCJNVUxUSVBPTFlHT04iKQ0KDQojIHNldCBBdGxhbnRpYyBMVFJBTlMgY29ubmVjdGl2aXR5IHByb2plY3QNCkF0bGJib3ggPC0gYygtMTM1LjgwMDMsNDUuMzgzNywtMTIyLjA2OTQsNTYuMTY0NykNCkF0bGFudGljIDwtIGNiaW5kKA0KICAgICAgICAgICAgYyhBdGxiYm94WzFdLEF0bGJib3hbM10sQXRsYmJveFszXSxBdGxiYm94WzFdLEF0bGJib3hbMV0pLA0KICAgICAgICAgICAgYyhBdGxiYm94WzJdLEF0bGJib3hbMl0sQXRsYmJveFs0XSxBdGxiYm94WzRdLEF0bGJib3hbMl0pDQogICAgICAgICkgJT4lIA0KICAgIGxpc3QoKSAlPiUgICAgICAgICAgICAgICAgICAjIHB1dCB0aGF0IG1hdHJpeCBpbiBhIGxpc3QNCiAgICBzdF9wb2x5Z29uKCkgJT4lICAgICAgICAgICAgIyBwdXQgdGhhdCBsaXN0IGluIGEgc2ltcGxlIGZlYXR1cmVzIHBvbHlnb24NCiAgICBzdF9zZmMoY3JzID0gcHJvamxsKSAlPiUgICMgcHV0IHRoYXQgcG9seWdvbiBpbnRvIGEgc2ltcGxlIGZlYXR1cmVzIGNvbHVtbiBhbmQgZ2l2ZSBwcm9qZWN0aW9uIGluZm8NCiAgICBzdF9zZihuYW1lPSJSZW1pIERhaWdsZSIsDQogICAgICAgICBkZXNjcmlwdGlvbj0iQkMgTFRSQU5TIGNvbm5lY3Rpdml0eSIsDQogICAgICAgICBDSE9OZVByb2plY3Q9IjEuMS4xIiwNCiAgICAgICAgIGdlb21ldHJ5PS4pICU+JSAgICAjIGZpbmFsbHkgbWFrZSBpdCBhbiBzZiBvYmplY3QNCiAgICBzdF9jYXN0KCJNVUxUSVBPTFlHT04iKQ0KDQojIGJpbmQgYWxsIG15IHNpdGVzIHRvZ2V0aGVyDQpzaXRlcyA8LSByYmluZChPSEksQkMsQXRsYW50aWMpDQoNCmBgYA0KDQpGaW5hbGx5LCBwbG90IGl0IQ0KDQoNCmBgYHtyfQ0KY29scyA8LSBSQ29sb3JCcmV3ZXI6OmJyZXdlci5wYWwobnJvdyhzaXRlcyksIkRhcmsyIikNCg0KbGVhZmxldChzaXRlcykgJT4lDQogICAgYWRkVGlsZXMoKSAlPiUgDQogICAgYWRkUG9seWdvbnMoZ3JvdXAgPSB+ZGVzY3JpcHRpb24sDQogICAgICAgICAgICAgICAgY29sb3IgPSBjb2xzKSAlPiUNCiAgICAgYWRkTGVnZW5kKCJ0b3ByaWdodCIsIA0KICAgICAgICAgICAgICAgY29sb3JzID0gY29scywNCiAgICAgICAgICAgICAgIGxhYmVscyA9IHVuaXF1ZShzaXRlcyRkZXNjcmlwdGlvbikpDQogICAgDQpgYGA=